home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ip / ka9q / osrc.arc / KISS.C < prev    next >
Encoding:
C/C++ Source or Header  |  1988-10-10  |  2.1 KB  |  110 lines

  1. #include "global.h"
  2. #include "mbuf.h"
  3. #include "iface.h"
  4. #include "kiss.h"
  5. #include "trace.h"
  6.  
  7. /* Send raw data packet on KISS TNC */
  8. kiss_raw(iface,data)
  9. struct iface *iface;
  10. struct mbuf *data;
  11. {
  12.     register struct mbuf *bp;
  13.  
  14.     /* Put type field for KISS TNC on front */
  15.     if((bp = pushdown(data,1)) == NULLBUF){
  16.         free_p(data);
  17.         return;
  18.     }
  19.     bp->data[0] = KISS_DATA;
  20.     slip_raw(iface,bp);
  21. }
  22.  
  23. /* Process incoming KISS TNC frame */
  24. void
  25. kiss_recv(iface,bp)
  26. struct iface *iface;
  27. struct mbuf *bp;
  28. {
  29.     char kisstype;
  30.  
  31.     kisstype = pullchar(&bp);
  32.     switch(kisstype & 0xf){
  33.     case KISS_DATA:
  34.         ax_recv(iface,bp);
  35.         break;
  36.     default:
  37.         free_p(bp);
  38.         break;
  39.     }
  40. }
  41. /* Perform device control on KISS TNC by sending control messages */
  42. kiss_ioctl(iface,argc,argv)
  43. struct iface *iface;
  44. int argc;
  45. char *argv[];
  46. {
  47.     struct mbuf *hbp;
  48.     int i;
  49.     char *cp;
  50.  
  51.     if(argc < 1){
  52.         printf("Data field missing\r\n");
  53.         return 1;
  54.     }
  55.     /* Allocate space for arg bytes */
  56.     if((hbp = alloc_mbuf((int16)argc)) == NULLBUF){
  57.         free_p(hbp);
  58.         return 0;
  59.     }
  60.     hbp->cnt = argc;
  61.     hbp->next = NULLBUF;
  62.     for(i=0,cp = hbp->data;i < argc;)
  63.         *cp++ = atoi(argv[i++]);
  64.  
  65.     slip_raw(iface,hbp);    /* Even more "raw" than kiss_raw */
  66.     return 0;
  67. }
  68. int ki_dump(bpp,check)
  69. struct mbuf **bpp;
  70. int check;
  71. {
  72.     char type;
  73.     char val;
  74.  
  75.     printf("KISS: ");
  76.     pullup(bpp,(char *)&type,1);
  77.     if(uchar(type) == KISS_DATA){
  78.         printf("Data\n");
  79.         ax25_dump(bpp,check);
  80.         return;
  81.     }
  82.     pullup(bpp,(char *)&val,1);
  83.     switch(uchar(type)){
  84.     case KISS_TXD:
  85.         printf("TX Delay: %lu ms\n",uchar(val) * 10L);
  86.         break;
  87.     case KISS_P:
  88.         printf("Persistence: %u/256\n",uchar(val) + 1);
  89.         break;
  90.     case KISS_ST:
  91.         printf("Slot time: %lu ms\n",uchar(val) * 10L);
  92.         break;
  93.     case KISS_TXT:
  94.         printf("TX Tail time: %lu ms\n",uchar(val) * 10L);
  95.         break;
  96.     case KISS_FD:
  97.         printf("Duplex: %s\n",uchar(val) == 0 ? "Half" : "Full");
  98.         break;
  99.     case KISS_HW:
  100.         printf("Hardware %u\n",uchar(val));
  101.         break;
  102.     case KISS_RETURN:
  103.         printf("RETURN\n");
  104.         break;
  105.     default:
  106.         printf("code %u arg %u\n",uchar(type),uchar(val));
  107.         break;
  108.     }
  109. }
  110.